package com.yeti.domain;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;

import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;
import org.hibernate.validator.constraints.NotEmpty;
import org.springframework.format.annotation.DateTimeFormat;



@Entity
public class Lista implements Serializable{
	

	private static final long serialVersionUID = 1L;
	
	@Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
	
	@NotEmpty
	private String nombre;
	
//	@ManyToMany(fetch = FetchType.EAGER, mappedBy = "listas")
	@ManyToMany
	@JoinTable(
		      name="cliente_lista",
		      joinColumns={@JoinColumn(name="lista_id", referencedColumnName="id")},
		      inverseJoinColumns={@JoinColumn(name="cliente_id", referencedColumnName="id")})
	@LazyCollection(LazyCollectionOption.FALSE)
	private List<Cliente> gestores;
	
	@OneToOne(targetEntity=Cliente.class)
	private Cliente administrador;
	
	@DateTimeFormat(pattern="dd/MM/yyyy")
	private Date fechaCreacion;
	
	@ManyToMany
	  @JoinTable(
	      name="producto_lista",
	      joinColumns={@JoinColumn(name="lista_id", referencedColumnName="id")},
	      inverseJoinColumns={@JoinColumn(name="producto_id", referencedColumnName="id")})
	@LazyCollection(LazyCollectionOption.FALSE)
	private List<Producto> productos;
	
	
	public Integer getId() {
		return this.id;
	}

	public void setId(Integer id) {
		this.id = id;
	}
	
	public String getNombre() {
		return this.nombre;
	}
	    
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	public void setGestores(List<Cliente> gestores){
		this.gestores = gestores;
	}
	
	public void setGestor(Cliente gestor){
		this.gestores.add(gestor);
	}
	
	public List<Cliente> getGestores(){
		return this.gestores;
	}
	    
	public Producto getProducto(int i) {
		return this.productos.get(i);
	}
	
	public boolean setProducto(Producto p) {
		return this.productos.add(p);
	}
	
	public List<Producto> getProductos(){
		return this.productos;
	}
	
	public void setProductos(List<Producto> productos){
		this.productos = productos;
	}

	public Cliente getAdministrador() {
		return this.administrador;
	}

	public void setAdministrador(Cliente administrador) {
		this.administrador = administrador;
	}

	public Date getFechaCreacion() {
		return fechaCreacion;
	}
	
	public void setFechaCreacion(Date fecha) {
		this.fechaCreacion = fecha;
	}
	
	public void removeProducto(Producto p){
		this.productos.remove(p);
	}
	
	public void removeGestor(Cliente c){
		this.gestores.remove(c);
	}

	
}
